草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - 从调用堆栈中获取函数名

我正在开发一个调用native代码的Android程序。该native代码存在段错误,并且由于通过androidNDK进行调试并不是真正可行的,所以我留下了一个如下所示的调用堆栈(从ddms捕获)。我的问题是,我是否可以在事后手动运行某些东西,将调用堆栈中的内存地址转换为函数名称,这样我就可以看到这是哪里出现了段错误。谢谢02-2214:47:39.231:DEBUG/dalvikvm(504):Tryingtoloadlib/data/data/android.TestApp/lib/libDM.so0x43b7c93802-2214:47:39.301:DEBUG/dalvikvm

c++ - 从调用堆栈中获取函数名

我正在开发一个调用native代码的Android程序。该native代码存在段错误,并且由于通过androidNDK进行调试并不是真正可行的,所以我留下了一个如下所示的调用堆栈(从ddms捕获)。我的问题是,我是否可以在事后手动运行某些东西,将调用堆栈中的内存地址转换为函数名称,这样我就可以看到这是哪里出现了段错误。谢谢02-2214:47:39.231:DEBUG/dalvikvm(504):Tryingtoloadlib/data/data/android.TestApp/lib/libDM.so0x43b7c93802-2214:47:39.301:DEBUG/dalvikvm

c++ - 我将如何在 C++03 中可移植地实现对齐的堆栈存储?

在C++03代码中,我将如何可移植地实现一个unsignedchar[sizeof(T)]缓冲区,其大小和对齐方式与给定类型T?例如:templatevoidtest(){unsignedcharbuffer[sizeof(T)];//~T();}else{/*use'buffer'forsomethingelse*/}}这是否可能,或者您是否被迫使用编译器扩展来实现这一点? 最佳答案 在他的GuruOfTheWeek#28在专栏中,HerbSutter使用union,但不如Boost的努力强大。Boost的aligned_stor

c++ - 我将如何在 C++03 中可移植地实现对齐的堆栈存储?

在C++03代码中,我将如何可移植地实现一个unsignedchar[sizeof(T)]缓冲区,其大小和对齐方式与给定类型T?例如:templatevoidtest(){unsignedcharbuffer[sizeof(T)];//~T();}else{/*use'buffer'forsomethingelse*/}}这是否可能,或者您是否被迫使用编译器扩展来实现这一点? 最佳答案 在他的GuruOfTheWeek#28在专栏中,HerbSutter使用union,但不如Boost的努力强大。Boost的aligned_stor

C++ - 本地堆栈数组与动态分配

使用C/C++编程时;根据经验,使用chararray[MAX_PATH+1]={0}的截止点是什么:char*array=nullptr;array=newchar[MAX_PATH+1];...code...delete[]array;在什么时候采取行动来保留堆栈上的空间?20年前我被教导应该在堆上分配超过32个字节的所有数组,而不考虑性能成本,并将堆栈保存为简单变量。我已经看到很多现代示例代码非常挥霍地使用堆栈,那么这种想法是否改变了? 最佳答案 栈分配的好处是不用检查失败,不用担心内存碎片,函数返回时内存会自动释放。缺点是您

C++ - 本地堆栈数组与动态分配

使用C/C++编程时;根据经验,使用chararray[MAX_PATH+1]={0}的截止点是什么:char*array=nullptr;array=newchar[MAX_PATH+1];...code...delete[]array;在什么时候采取行动来保留堆栈上的空间?20年前我被教导应该在堆上分配超过32个字节的所有数组,而不考虑性能成本,并将堆栈保存为简单变量。我已经看到很多现代示例代码非常挥霍地使用堆栈,那么这种想法是否改变了? 最佳答案 栈分配的好处是不用检查失败,不用担心内存碎片,函数返回时内存会自动释放。缺点是您

c++ - 如何在 gdb 堆栈跟踪充满 '??' 时调试段错误?

我的可执行文件包含符号表。但似乎堆栈跟踪被覆盖了。请问如何从该核心中获取更多信息?例如,有没有办法检查堆?查看填充堆的对象实例以获得一些线索。无论如何,任何想法都值得赞赏。 最佳答案 我以C++程序员为生,遇到这个问题的次数比我愿意承认的要多。您的应用程序正在破坏堆栈的巨大部分。很有可能破坏堆栈的函数在返回时也会崩溃。之所以会这样,是因为返回地址被覆盖了,这也是GDB的堆栈跟踪乱七八糟的原因。这是我调试此问题的方式:1)单步执行应用程序,直到它崩溃。(寻找一个在返回时崩溃的函数)。2)一旦你确定了函数,在函数的VERYFIRSTLI

c++ - 如何在 gdb 堆栈跟踪充满 '??' 时调试段错误?

我的可执行文件包含符号表。但似乎堆栈跟踪被覆盖了。请问如何从该核心中获取更多信息?例如,有没有办法检查堆?查看填充堆的对象实例以获得一些线索。无论如何,任何想法都值得赞赏。 最佳答案 我以C++程序员为生,遇到这个问题的次数比我愿意承认的要多。您的应用程序正在破坏堆栈的巨大部分。很有可能破坏堆栈的函数在返回时也会崩溃。之所以会这样,是因为返回地址被覆盖了,这也是GDB的堆栈跟踪乱七八糟的原因。这是我调试此问题的方式:1)单步执行应用程序,直到它崩溃。(寻找一个在返回时崩溃的函数)。2)一旦你确定了函数,在函数的VERYFIRSTLI

c++ - 隔离堆栈粉碎错误的工具

委婉地说,我有一个小的内存问题,并且正在用完工具和想法来找出原因。我有一个高度多线程(pthreads)的C/C++程序,它在4.4.4之后和4.7.1之前的GCC优化编译下开发了堆栈粉碎问题。症状是在创建其中一个线程期间,我得到了一个完整的堆栈粉碎,不仅仅是%RIP,而且所有父帧和大多数寄存器都是0x00或其他无意义的地址。哪个线程导致问题似乎是随机的,但是从日志消息来看,它似乎与相同的代码块隔离,并且似乎在创建新线程时出现了半可重复的点。这使得捕获和隔离有问题的代码变得非常困难,而不是一个可能有数千行的编译单元,因为到目前为止,在有问题的文件中的print()在试图缩小范围时被证明

c++ - 隔离堆栈粉碎错误的工具

委婉地说,我有一个小的内存问题,并且正在用完工具和想法来找出原因。我有一个高度多线程(pthreads)的C/C++程序,它在4.4.4之后和4.7.1之前的GCC优化编译下开发了堆栈粉碎问题。症状是在创建其中一个线程期间,我得到了一个完整的堆栈粉碎,不仅仅是%RIP,而且所有父帧和大多数寄存器都是0x00或其他无意义的地址。哪个线程导致问题似乎是随机的,但是从日志消息来看,它似乎与相同的代码块隔离,并且似乎在创建新线程时出现了半可重复的点。这使得捕获和隔离有问题的代码变得非常困难,而不是一个可能有数千行的编译单元,因为到目前为止,在有问题的文件中的print()在试图缩小范围时被证明